package app.models;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import app.util.DateUtils;

/**
 * @author Douglas Fernandes
 * @since 22/11/2013
 */

@Entity
@Table(name = "PACIENTE")
public class Paciente implements Pojo {
	
	private static final long serialVersionUID = 3663026546076423791L;
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID")
	private Long id;
	
	@Column(name = "ID_ENDERECO")
	@NotNull(message = "O paciente deve ter um endereco")
	private Long idEndereco;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_ENDERECO", referencedColumnName = "ID", insertable = false, updatable = false)
	private Endereco endereco;
	
	@Column(name = "ID_CONVENIO")
	private Long idConvenio;
	
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "ID_CONVENIO", referencedColumnName = "ID", insertable = false, updatable = false)
	private Convenio convenio;

	@NotNull(message = "O nome deve ser preenchido")
	@Column(name = "NOME", columnDefinition = "varchar(200)")
	private String nome;
	
	@Column(name = "TELEFONE1", columnDefinition = "varchar(30)")
	private String telefone1;
	
	@Column(name = "TELEFONE2", columnDefinition = "varchar(30)")
	private String telefone2;
	
	@Pattern(regexp = "[0-9]{4}/[0-9]{2}/[0-9]{2}", message = "A data de nascimento esta mal formada")
	@NotNull(message = "A data de nascimento deve ser preenchida")
	@Column(name = "DATA_NASCIMENTO", columnDefinition = "date")
	private Date dataNascimento;

	@NotNull(message = "O CPF deve ser preenchido")
	@Column(name = "CPF", columnDefinition = "varchar(30)")
	private String cpf;
	
	@NotNull(message = "O RG deve ser preenchido")
	@Column(name = "RG", columnDefinition = "varchar(11)")
	private String rg;
	
	@Column(name = "NUM_CARTEIRA", columnDefinition = "varchar(50)")
	private String numCarteira;

	@Column(name = "NOME_PAI", columnDefinition = "varchar(200)")
	private String nomePai;
	
	@Column(name = "NOME_MAE", columnDefinition = "varchar(200)")
	private String nomeMae;
	
	@Column(name = "EMAIL", columnDefinition = "varchar(70)")
	private String email;
	
	@Pattern(regexp = "[0-9]{4}/[0-9]{2}/[0-9]{4}", message = "A data de cadastro esta mal formada")
	@NotNull(message = "A data de cadastro deve ser preenchida")
	@Column(name = "DATA_CADASTRO", columnDefinition = "date")
	private String dataCadastro = DateUtils.getDataAtual();
	
	@Pattern(regexp = "[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}", message = "A hora do cadastro esta mal formada")
	@NotNull(message = "A hora do cadastro deve ser preenchida")
	@Column(name = "HORA_CADASTRO", columnDefinition = "time")
	private String horaCadastro = DateUtils.getHoraAtual();
	
	
	public void setId(Long id) {
		this.id = id;
	}

	public Long getId() {
		return id;
	}

	public Long getIdEndereco() {
		return idEndereco;
	}

	public void setIdEndereco(Long idEndereco) {
		this.idEndereco = idEndereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public Long getIdConvenio() {
		return idConvenio;
	}

	public void setIdConvenio(Long idConvenio) {
		this.idConvenio = idConvenio;
	}

	public void setConvenio(Convenio convenio) {
		this.convenio = convenio;
	}

	public Convenio getConvenio() {
		return convenio;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public String getTelefone1() {
		return telefone1;
	}

	public void setTelefone1(String telefone1) {
		this.telefone1 = telefone1;
	}

	public String getTelefone2() {
		return telefone2;
	}

	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}

	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getCpf() {
		return cpf;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	public String getRg() {
		return rg;
	}

	public void setNumCarteira(String numCarteira) {
		this.numCarteira = numCarteira;
	}

	public String getNumCarteira() {
		return numCarteira;
	}

	public void setNomePai(String nomePai) {
		this.nomePai = nomePai;
	}

	public String getNomePai() {
		return nomePai;
	}

	public void setNomeMae(String nomeMae) {
		this.nomeMae = nomeMae;
	}

	public String getNomeMae() {
		return nomeMae;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEmail() {
		return email;
	}

	public String getDataCadastro() {
		return dataCadastro;
	}

	public void setDataCadastro(String dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public String getHoraCadastro() {
		return horaCadastro;
	}

	public void setHoraCadastro(String horaCadastro) {
		this.horaCadastro = horaCadastro;
	}

}
